package com.hjm.project.merchantModel.service.impl;

import com.hjm.common.exception.BusinessException;
import com.hjm.common.utils.DateUtils;
import com.hjm.common.utils.security.ShiroUtils;
import com.hjm.project.merchantModel.domain.MerchantModel;
import com.hjm.project.merchantModel.mapper.MerchantModelMapper;
import com.hjm.project.merchantModel.service.IMerchantModelService;
import com.hjm.project.merchantModelDetail.mapper.MerchantModelDetailMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 商户模板费率Service业务层处理
 * 
 * @author surplus
 * @date 2022-07-10
 */
@Service
public class MerchantModelServiceImpl implements IMerchantModelService {
    @Resource
    private MerchantModelMapper merchantModelMapper;
    @Resource
    private MerchantModelDetailMapper merchantModelDetailMapper;

    /**
     * 查询商户模板费率
     * 
     * @param id 商户模板费率ID
     * @return 商户模板费率
     */
    @Override
    public MerchantModel selectMerchantModelById(Integer id) {
        return merchantModelMapper.selectMerchantModelById(id);
    }

    /**
     * 查询商户模板费率列表
     * 
     * @param merchantModel 商户模板费率
     * @return 商户模板费率
     */
    @Override
    public List<MerchantModel> selectMerchantModelList(MerchantModel merchantModel) {
        return merchantModelMapper.selectMerchantModelList(merchantModel);
    }
    public List<MerchantModel> selectMerchantModelAgentList(MerchantModel merchantModel) {
        return merchantModelMapper.selectMerchantModelAgentList(merchantModel);
    }

    /**
     * 查询商户模板费率列表
     *
     * @param merchantModel 商户模板费率
     * @return 商户模板费率 一个结果
     */
    @Override
    public MerchantModel selectMerchantModelOne(MerchantModel merchantModel) {
        return merchantModelMapper.selectMerchantModelOne(merchantModel);
    }

    /**
     * 新增商户模板费率
     * 
     * @param merchantModel 商户模板费率
     * @return 结果
     */
    @Override
    public int insertMerchantModel(MerchantModel merchantModel) {
        int modelNo = merchantModelMapper.selectRateCode();
        merchantModel.setAddMan(ShiroUtils.getLoginName());
        merchantModel.setAddTime(DateUtils.getDateTime());
        if ("4".equals(merchantModel.getModelType())) {
            merchantModel.setModelNo("DQ" + modelNo);
        } else if ("0".equals(merchantModel.getModelType())) {
            merchantModel.setModelNo("CT" + modelNo);
        } else if ("1".equals(merchantModel.getModelType())) {
            merchantModel.setModelNo("FJ" + modelNo);
        }
        if ("1".equals(merchantModel.getIsDefault())) {
            MerchantModel mm = new MerchantModel();
            mm.setIsDefault("0");
            mm.setModelType(merchantModel.getModelType());
            merchantModelMapper.updateMerchantAllModel(mm);
        }
        return merchantModelMapper.insertMerchantModel(merchantModel);
    }

    /**
     * 修改商户模板费率
     * 
     * @param merchantModel 商户模板费率
     * @return 结果
     */
    @Override
    public int updateMerchantModel(MerchantModel merchantModel) {
        if ("1".equals(merchantModel.getIsDefault())) {
            MerchantModel mm = new MerchantModel();
            mm.setIsDefault("0");
            mm.setModelType(merchantModel.getModelType());
            merchantModelMapper.updateMerchantAllModel(mm);
        }
        return merchantModelMapper.updateMerchantModel(merchantModel);
    }

    /**
     * 删除商户模板费率对象
     * 
     * @param modelNo 需要删除的数据ID
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteMerchantModelByNo(String modelNo) {
        MerchantModel model = new MerchantModel();
        model.setModelNo(modelNo);
        MerchantModel model1 = merchantModelMapper.selectMerchantModelOne(model);
        if ("1".equals(model1.getIsDefault())) {
            throw new BusinessException("默认模版不可删除");
        }
        if ("1".equals(model1.getIsShow())) {
            throw new BusinessException("显示的模版不可删除");
        }

        merchantModelDetailMapper.deleteMerchantModelRateByNo(modelNo);
        return merchantModelMapper.deleteMerchantModelByNo(modelNo);
    }

}
